package com.gxgy.uilt;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;


/**
 * @description: MD5加密
 * @author: Qin Fengang
 * @date: 2021-11-8
 */
public class MD5Util {
	
	public static void 	main(String[] args) {
		
		System.out.println(md5Encryption("123"));
		
		
	}

/**
 * 生成32位md5码
 * @param password
 * @return
 */
	//加盐方式
	 public static String md5Encryption(String encryption){
		 //获取信息摘要器对象
		 try {
			MessageDigest digest=MessageDigest.getInstance("md5");
			byte[]result=digest.digest(encryption.getBytes());
			 StringBuffer buffer=new StringBuffer();
			 //把每一个byte做一个与运算0xff;
			 /*为什么要与0xFF进行与运算，
			  * 任意数与OxFF进行与运算都是取16进制的后两位
			  */
			 for(byte b:result){
				 //与运算
				 int number=b&0xff; //加盐
				 String str=Integer.toHexString(number);
				 if(str.length()==1){
					 buffer.append("0");
				 }
				 buffer.append(str);
			 }
			 //返回标准的md5加密后的结果
			 return buffer.toString();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return "";
		}
		
		 
	 }
	 
	 
	//二、普通方式
	 
	 public static String MD5(String key){
		 char hexDigists[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		      		       
			try {
				 byte[] btInput=key.getBytes();
			       //获取MD5摘要算法的MessageDigest对象
				MessageDigest mdInst = MessageDigest.getInstance("md5");
				  //使用指定的字节更新摘要
			       mdInst.update(btInput);
			       //获得密文
			       byte[] md=mdInst.digest();
			      //把密文转换成 十六进制的字符串形式
			       int j=md.length;
			       char str[]=new char[j*2];
			       int k=0;
			       for(int i=0;i<j;i++){
			    	   byte byte0=md[i];
			    	   str[k++]=hexDigists[byte0>>>4&0xf];
			    	   str[k++]=hexDigists[byte0&0xf];
			       }
			       return new String(str);
			} catch (NoSuchAlgorithmException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return null;
			}	     
		 
	 }

}









